class Watcher {
  constructor(vm, key, cb) {
    this.vm = vm
    //属性名
    this.key = key
    //回调函数
    this.cb = cb
    // 把 watcher 对象记录到 Dep 类的静态属性 target
    Dep.target = this
    // 这里触发 get 方法，在 get 方法中调用 addSub
    this.oldValue = vm[key]
    //重置 Dep.target
    Dep.target = null
  }

  //当数据发生变化时更新视图
  update() {
    const newValue = this.vm[this.key]
    if (newValue === this.oldValue) return
    this.cb(newValue)
  }
}
